class code2 {
    //优美的排列
    boolean[] check;//记录是否选过
    int ret = 0;
    public int countArrangement(int n) {
        check = new boolean[n+1];

        dfs(1,n);
        return ret;
    }
    void dfs(int pos,int n) {
        //出口
        if(pos==n+1) {
            ret++;
            return;
        }
        //核心
        for(int i=1;i<=n;i++) {
            if(check[i]==false && (pos%i==0||i%pos==0)) {
                check[i] = true;
                dfs(pos+1,n);
                check[i] = false;//恢复现场
            }
        }
    }
}